package controller.gui;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;

import controller.BrowseUser;
import controller.Controller;
import controller.NullStaticObjectException;
import controller.SecondaryMenuButtonController;


/**rappresenta un Controller che pilota un pulsante che sfoglia il
 * filesystem per ricercare particolari file
 * 
 * @author koldar
 * @version 1.3.1
 */
public abstract class BrowseButtonController extends SecondaryMenuButtonController implements BrowseUser{
	
	protected Frame frame;
	
	public BrowseButtonController(Frame frame,JButton button) {
		super(button);
		this.frame=frame;
	}

	/**Il BrowseButton esegue queste operazioni:
	 * <ul>
	 *  <li>apre un filechooser in cui sono visibili solo directory</li>
	 *  <li>l'utente sceglie una directory</li>
	 *  <li>vengono caricate tutte le classi all'interno del sottoalbero del file system
	 *  che siano figlie di {@link #fatherClass}</li>
	 *  <li>vengono aggiornati i pannelli all'interno del SecondaryMenu in questione 
	 * </ul>
	 * 
	 */
	@Override
	public void wizardInizializer(ActionEvent arg0)	throws NullStaticObjectException {
		this.setChooser();
		if (this.filechooser.showDialog(this.frame,this.filechooser.getApproveButtonText())==JFileChooser.APPROVE_OPTION){
			this.okInstructionList(this.filechooser.getSelectedFile());
		}
	}
	/**imposta il filechooser in modo conforme
	 * alle esigenze di questoBrowse Controller. In questo metodo
	 * vanno scritte mpostazioni come il filtro da usare o altre
	 * opazionalità aggiuntive del FileChooser del browse controller,
	 * il <tt>filechooser</tt>. Le impostazioni consigliate da inserire nel metodo
	 * sono :
	 * <ul>
	 *  <li>il filtro da usare</li>
	 *  <li>il testo sul pulsante OK<li>
	 * </ul>
	 * 
	 * @param chooser il JFileChooser da personalizzare in modo che
	 */
	public abstract void setChooser();
	
	/**rappresenta la lista di istruzioni da eseguire quando il pulsante OK del
	 * JFileChooser viene premuto; questo equivale a dire che l'utente ha selezionato
	 * il file che vuoi usare
	 * 
	 * @param fileselected indica il file selezionato dall'utente
	 */
	public abstract void okInstructionList(File fileselected);


}
